In today's highly networked computer environments, distributed computing is critical because it allows the resources of relatively small computers to be combined to provide a more powerful overall system. Distributed computing allows data and programs to be spread out, or distributed, across large networks of heterogeneous computers, in a manner that is transparent to the user. Thus, data that is too large to fit on a single computer may be broken into smaller pieces and stored on several computers, or processes that service a high volume of users may be spread out across the network to more efficiently service end-users.
Because of the need for flexibility with distributed computing environments, numerous logistical issues and problems arise. For example, while any two computers on such a network can communicate with each other on the network, the cost of communication may vary depending upon the computers involved and the topology of the communications network. Moreover, operations that appear to be fairly straightforward (e.g., processes for locating homepages on the World Wide Web) can become logistically difficult to manage where the environment is constantly changing (e.g., homepages moving to new physical locations). The problem associated with locating resources in any distributed environment is of particular concern and is addressed by this invention.
Typical distributed computing environments include clients, resource computers (e.g., servers), and resources. A resource is any entity available for a computer process to use as part of its computation. Resources may be physical (e.g., a robot arm) or logical (e.g., a database). Other examples of resources include a CD-ROM disk, a name server process, an object-oriented programming object, a location in a distributed shared memory and so on.
A resource can own another resource if it "contains" the owned resource. A resource contains another resource if performing a physical operation on the container (e.g., destroying it, etc), implies performing the same operation on the contained resource. For instance, a physical disk containing a collection of files owns all of the files on the disk or a region of distributed shared memory owns an object-oriented programming object allocated in the memory region, etc. For a resource to own another resource, the owning resource must be less abstract than the owned resource. Thus, physical resources, (e.g., a computer) can own logical resources, (e.g., a name-server process). Since physical resources (e.g., disks, robot arms, etc.) are not abstractions, they do not have owners.
At any point in time at most one computer in the distributed, computing environment controls each resource. The computer controlling a resource is the computer to which the resource is attached and the controlling computer has responsibility for mediating and enabling non-local accesses to the resource. Moreover, at any instance in time a resource need not be controlled (e.g., consider the case of a disk that is in a desk drawer). If a computer controls a given resource r, it also controls all of the resources owned by r. A resource is born on the computer which first controlled the resource.
A resource server is a computer that controls one or more resources and which enables other computers in the distributed computing environment to access (a non-empty subset of) the resources it controls. Of concern here, are those resources which can be potentially be made accessible to other computers via resource servers.
Migration is a persistent change of either the owner or controller of a given resource. The controller of a resource is changed by detaching it from one computer and reattaching it to another (e.g., by physically moving a diskette from a drive on one machine to a drive on another machine). The owner of a (logical) resource is changed by destructively copying the logical resource (e.g., moving the backing store for a region of distributed shared memory from one device to another).
As noted above, tracking and locating resources can become logistically difficult on large distributed computing networks where migration occurs. Moreover, given the numerous places a resource could potentially migrate to (e.g., consider the web), the costs involved in locating resources can become practically unbounded. None the less, in distributed systems, clients often need to quickly find the machine controlling a remote resource.
One method of locating resources involves the utilization of a resource identifier (RID) to identify the resource. That is, if every resource has a unique identifier, the location of the resource could be encoded in the RID. However, because flexible distributed systems sometimes must change the machine controlling a resource, a system of dealing with migration must be employed. Previous approaches to finding resources that may migrate may suffer from numerous drawbacks including the potential of requiring unbounded communications, the need to support distributed garbage collection to (transparently) update existing RID's, the need to include a dedicated server, or the need to maintain a continued connection between the resource and its creating server.
The following documents each describe some form of resource tracking/locating, but each is subject to some of the above-mentioned limitations. J. Chase, H. Levy, E. Lazowska and M. Baker-Harvey. "Lightweight shared objects in a 64-bit operating system," OOPSLA 92: Conference on Object-Oriented Programming Systems, Languages and Applications, ACM/SIGPLAN 1992. p.397.; M. Day, B. Liskov, U. Maheshwari, and A. Meyers. "References to remote mobile objects in Thor." ACM Letters on Programming Languages and Systems, 2(1-4), March-December 1993. p115; J. Ioannidis, D. Duchamp, and G. Maguire, Jr. "IP-based protocols for mobile internetworking" Technical Report CUCS-006-91, Department of Computer Science, Columbia University 1991; and "Universal Networked Objects," CORBA 2.0/Interoperability, OMG TC Document 95.3.xx, Mar. 20, 1995.
Distributed computing environments, including the internet, world wide web, intranets and large corporate networks, will continue to play a dominate role in computing. Efficient management of computing resources will be a primary challenge in enabling such environments to fulfill the needs of the end-users. Thus, a need exists to provide an efficient system of tracking and locating resources. The aforementioned art is hereby incorporated by reference.